package com.atguigu.proxy.proxy;

import com.atguigu.proxy.api.Calculator;

public class LogStaticProxy implements Calculator {

    // 成员变量：被代理的目标对象
    private Calculator target;

    // 通过构造器传入被代理的目标对象
    public LogStaticProxy(Calculator target) {
        this.target = target;
    }

    @Override
    public int add(int i, int j) {

        System.out.println("[静态代理][日志][核心操作前]add方法开始了，入参是：i = " + i + " j = " + j);

        // 在代理方法中调用目标方法
        int result = target.add(i, j);

        System.out.println("[静态代理][日志][核心操作后]add方法结束了，返回值是：result = " + result);

        return result;
    }

    @Override
    public int sub(int i, int j) {

        System.out.println("[静态代理][日志][核心操作前]sub方法开始了，入参是：i = " + i + " j = " + j);

        // 在代理方法中调用目标方法
        int result = target.sub(i, j);

        System.out.println("[静态代理][日志][核心操作后]sub方法结束了，返回值是：result = " + result);

        return result;
    }

    @Override
    public int mul(int i, int j) {

        System.out.println("[静态代理][日志][核心操作前]mul方法开始了，入参是：i = " + i + " j = " + j);

        // 在代理方法中调用目标方法
        int result = target.mul(i, j);

        System.out.println("[静态代理][日志][核心操作后]mul方法结束了，返回值是：result = " + result);

        return result;
    }

    @Override
    public int div(int i, int j) {

        System.out.println("[静态代理][日志][核心操作前]div方法开始了，入参是：i = " + i + " j = " + j);

        // 在代理方法中调用目标方法
        int result = target.div(i, j);

        System.out.println("[静态代理][日志][核心操作后]div方法结束了，返回值是：result = " + result);

        return result;
    }
}
